Hello, 我是 Weber,一位 RoR 工程師,斜槓鼓手與行銷顧問。
Rails 開發,每日一套件,終於來到最後一天啦!!!
居然就這樣寫了 30 個套件,這過程也蠻有趣的,也希望能幫助大家對這些套件有個基礎的認識。
第 30 天,讓我來講一個現在已經是原生在你的 Rails 專案中的套件 - Bootsnap。
在 Rails 5.2 版之後,Bootsnap 已經是一個預設原生在 gemfile 中的套件了。相信很多 Rails 5.2 之後才加入的朋友,可能沒有注意到或甚至不知道有這個套件存在。我也是因為要寫這次鐵人賽,因緣際會下才開始認識 Bootsnap,進而開啟更多新宇宙...。
Bootsnap 是一個針對 Ruby 和 Ruby on Rails 的 boot time 做優化的工具,加速 Ruby 應用程式的啟動時間,降低記憶體的使用量,並且提高整體的效能。是一個非常強的套件。作者似乎先前是在 shopify 工作。
快取已編譯過的 Ruby 文件,以及快取 gem 的路徑。
不同於其他的 preloader,Bootsnap 是透過先掃描專案中會用到的 require 檔案位置,減少查看檔案位置的時間。並且預先把程式碼 compile 後的 bytecode 都先快取起來,產生一份 cache。
看到這裡,如果你把看不懂的名詞一路查下去,就會進入一個無窮盡的新宇宙,哈哈哈。
但很有趣,建議各位也自己做做看,我這邊就不做名詞解釋了,會牽扯到很多像是 middle-end, ruby 的 VM 等。等我日後能稍微講出一點東西時,再來寫一篇。
這要先講什麼是 Boot time,以及為什麼用 boot。(嘆..)
這是一個延伸而來的英語電腦俚語,常常在看原文章或者影片中,有時會聽到外國人說 boots up sth, 比方說 "let's boot excel on!" 之類的話,或者教學的範例中Boot Up!
也很常見。
其實這個詞是從 "bootstrap" 延伸而來的。
!!注意!!這裡 不是 指現在前端很流行的那個 Bootstrap。(它只是名字取的很好!)
bootstrap(cambridge辭典) 的原意是指 靴帶或者說拔靴帶,中文其實不常用這個詞,我們並沒有靴子的文化。
簡單來說就是一個方便你穿脫靴子的小東西。
在進入早期電腦時代後,bootstrap 延伸變成在電腦上會先安裝一個小程式,然後再讓你把其它檔案安裝到電腦上。
Mac 安裝軟體時,就有點這樣的概念。例如:
這就是一個小介面、小程式,幫助你把其他檔案裝到電腦上。
Window 則是跑一個安裝程式,要一直點next,next, next的那種。
而 boot 就變成像是 "啟動" 的意思,接著 boot-time 就變成了 "開啟後準備運作所需的時間"。很有趣吧!到這裡都是有根據的來源,我花了很長一段時間追朔。
因為執行速度很快,如彈指般(snap finger)的快!就這樣。
先說,這是我用我的英文語感猜測的,完全沒有問過原作者,這是我猜的!!!
但是不是聽起來蠻合理的,而且又好記。哈哈哈!
Bootsnap 的安裝非常簡單。如果你是 Rails 5.2 之後的版本,則已經內建了,不需要安裝。
起手式~
bundle add bootsnap
之後在 config/boot.rb
文件中加入以下:
require 'bundler/setup'
require 'bootsnap/setup'
*兩行順序不能對調
之後在專案資料夾中,tmp/cache/
底下,會多出一個 bootsnap
資料夾,並且內有 bootsnap-compile-cache
及 bootsnap-load-path-cache
,就是前面所講到的快取資料。
這樣就完成了。它就會自動開始優化 Ruby 的效能囉!
YA!完賽囉!
之後會同步更新到我個人的部落格,喜歡的話也可以追蹤喔!